from flask import render_template, g, abort, request, jsonify, current_app

from info.modules.user import user_blu
from info.utils.common import user_login_data, upload_file

#显示个人中心
from info.utils.response_code import error_map, RET


@user_blu.route('/user_info')
@user_login_data
def user_info():
    # 判断用户是否登录
    user=g.user
    if not user:
        return abort(403)
    return render_template("user.html",user=user.to_dict())

#显示基本资料
@user_blu.route('/base_info',methods=["GET","POST"])
@user_login_data
def base_info():
    user=g.user
    if not user:
        return abort(403)
    if request.method=="GET":#展示页面

        return render_template("user_base_info.html",user=user.to_dict())

    # POST 提交数据
    #获取参数
    signature = request.json.get("signature")
    nick_name = request.json.get("nick_name")
    gender = request.json.get("gender")
    #校验参数
    if not all([signature,nick_name,gender]):
        return jsonify(errno=RET.PARAMERR, errmsg=error_map[RET.PARAMERR])
    if gender not in ["MAN","WOMAN"]:
        return jsonify(errno=RET.PARAMERR, errmsg=error_map[RET.PARAMERR])
    #数据库行为
    user.signature=signature
    user.nick_name=nick_name
    user.gender=gender

    #提交数据
    return jsonify(errno=RET.OK, errmsg=error_map[RET.OK])


#显示/修改头像
@user_blu.route('/pic_info', methods=['GET', 'POST'])
@user_login_data
def pic_info():
    #判断用户是否登录
    user = g.user
    if not user: #用户未登录
        return abort(403)
    if request.method == "GET":  # 展示页面

        return render_template("user_pic_info.html", user=user.to_dict())
    # POST 提交数据
    # 获取参数
    avatar_file = request.files.get("avatar")
    # 读取上传文件的二进制数据
    try:
        img_bytes=avatar_file.read()
        print(img_bytes)
    except BaseException as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.PARAMERR, errmsg=error_map[RET.PARAMERR])
        # 上传文件
    try:
        file_name = upload_file(img_bytes)
    except BaseException as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.THIRDERR, errmsg=error_map[RET.THIRDERR])

        # 数据库行为: 修改用户数据
    user.avatar_url = file_name

    # json返回结果  为了让前端可以修改头像, 需要返回新的头像链接
    return jsonify(errno=RET.OK, errmsg=error_map[RET.OK], data=user.to_dict())
